﻿/*
 * Copyright (c) United Binary LLC.  All rights reserved.
 * 
 * This code is licensed under the MIT License
 * 
 * SEE: http://harnessit.codeplex.com/license
 * 
 */
using System;

namespace UnitedBinary.UnitTests.Framework
{
	[Flags]
	public enum Ignoring
	{
		Nothing = 0,
		Case = 1,
		Whitespace = 2,
		LeadingWhitespace = 4,
		TrailingWhitespace = 8
	}

	public interface ITestStringsDoes : ITestObjects
	{
		// These can live in ITest.Does also???
		ITestStringsDoes Contain(string substring);
		ITestStringsDoes Contain(string substring, Ignoring ignoreFlags);
		ITestStringsDoes NotContain(string substring);
		ITestStringsDoes NotContain(string substring, Ignoring ignoring);
		ITestStringsDoes StartWith(string substring);
		ITestStringsDoes StartWith(string substring, Ignoring ignoreFlags);
		ITestStringsDoes NotStartWith(string substring);
		ITestStringsDoes NotStartWith(string substring, Ignoring ignoreFlags);
		ITestStringsDoes EndsWith(string substring);
		ITestStringsDoes EndsWith(string substring, Ignoring ignoreFlags);
		ITestStringsDoes NotEndWith(string substring);
		ITestStringsDoes NotEndWith(string substring, Ignoring ignoreFlags);
	}

	public interface ITestStringsIs : ITestExtension
	{
		ITestStringsIs LongerThan(int length);
		ITestStringsIs NotLongerThan(int length);
		ITestStringsIs ShorterThan(int length);
		ITestStringsIs NotShorterThan(int length);
		ITestStringsIs Equal(string expectedText);
		ITestStringsIs Equal(string expectedText, Ignoring ignoreFlags);
		ITestStringsIs NotEqual(string expectedText);
		ITestStringsIs NullOrEmpty();
		ITestStringsIs NullOrEmpty(Ignoring ignoreFlags);
		ITestStringsIs Empty();
		ITestStringsIs Empty(Ignoring ignoreFlags);
		ITestStringsIs NotNullOrEmpty();
		ITestStringsIs NotNullOrEmpty(Ignoring ignoreFlags);
		ITestStringsIs NotEmpty();
		ITestStringsIs NotEmpty(Ignoring ignoreFlags);
		ITestStringsIs Null();
		ITestStringsIs NotNull();
		ITestStringsIs Uppercase();
		ITestStringsIs Lowercase();
		ITestStringsIs Number();
		ITestStringsIs Letters();
		ITestStringsIs LettersAndDigits();
	}

	public interface ITestStringAnd
	{
		ITestStringsIs Is();
		ITestStringsDoes Does();
	}
}